Devices using queuing systems for packets, for example gateways, switches and routers, are often used in networks supporting IP or TCPIP, such as Ethernet. A problem is, however, that packets get stuck in that queues when there is congestion in the network, or when a link is down or not ready. Under this stuck condition two things happen.
(1) Packets are stored in buffers and referenced through link lists. Complex conditions arise when packets are destined for multiple ports, and the packets can exit from some of the ports but not from others. Furthermore, new packets enter from other ports. The result can be that the packets can get stuck in the buffers indefinitely.
(2) Buffer space can be taken up by packets that are of lower priority, and higher priority packets get dropped.
One prior art solution is to wait until the congesting condition in the port is removed, and then the packets can exit from the port. The disadvantage of this solution is that during the time when the packets are locked in the switching device, they take up valuable space resources. As such, a condition may arise that low priority packets remain locked in the device while high priority packets are dropped when they enter the switching device from other ports.
Another solution is to remove all the packets when they have exceeded a time limit in the switching device. This is done indiscriminately for all packets regardless of priority. The disadvantage of this solution is that it does not differentiate between low and high priority packets. It also does not differentiate between time critical packets (e.g. for real time applications such as voice-over-IP, video-over-IP or other types of time critical packets).
It would be desirable to prevent packets from becoming stagnant within queues. It would also be desirable to prevent high-priority packets from being dropped by buffers already filled with low priority packets. Finally, it would be desirable to control the congestion in the network that causes these other problems.